// See the file "COPYING" in the main distribution directory for copyright.

#pragma once

#include "zeek/zeek-config.h"

namespace zeek::detail {

class TraversalCallback;

enum TraversalCode {
	TC_CONTINUE = 0,
	TC_ABORTALL = 1,
	TC_ABORTSTMT = 2,
};

#define HANDLE_TC_STMT_PRE(code) \
	{ \
	if ( (code) == zeek::detail::TC_ABORTALL ) \
		return (code); \
	else if ( (code) == zeek::detail::TC_ABORTSTMT ) \
		return zeek::detail::TC_CONTINUE; \
	}

#define HANDLE_TC_STMT_POST(code) \
	{ \
	if ( (code) == zeek::detail::TC_ABORTALL ) \
		return (code); \
	else if ( (code) == zeek::detail::TC_ABORTSTMT ) \
		return zeek::detail::TC_CONTINUE; \
	else \
		return (code); \
	}

#define HANDLE_TC_EXPR_PRE(code) \
	{ \
	if ( (code) == zeek::detail::TC_ABORTALL ) \
		return (code); \
	else if ( (code) == zeek::detail::TC_ABORTSTMT ) \
		return zeek::detail::TC_CONTINUE; \
	}

#define HANDLE_TC_EXPR_POST(code) \
	return (code);

} // namespace zeek::detail
